create or replace
FUNCTION FUNTION_PUNTOS_CLIENTE
    (IDCLIENTE IN VARCHAR2,
     CANTIDAD IN NUMBER,
     IDPERIODOACUMULACION IN NUMBER,
     IDVENTA IN VARCHAR2)
    
  RETURN NUMBER
  AS
    cantidadTotal number;
    cantidadActual number;
    existeCliente number;
    puntosGanados number;
    puntosAcumulados number;
    existeclienteptos number;
    
  BEGIN
    
	select count(*) into existeCliente
    from clpm_puntos_periodo_cliente
    where co_cliente_persona = IDCLIENTE
    and co_periodo_acumulacion = IDPERIODOACUMULACION
    and st_puntos_periodo_cliente = 'Y';
    
    update clpm_venta
     set va_puntos = CANTIDAD
     where id = IDVENTA;
    
    IF (existeCliente > 0) THEN
    
        dbms_output.put_line('SE ACTUALIZA LA CANTIDAD DE PUNTOS AL CLIENTE ' || CANTIDAD);
    
        select va_puntos_actuales,va_puntos_totales into cantidadActual,cantidadTotal
        from clpm_puntos_periodo_cliente where st_puntos_periodo_cliente = 'Y'
        and co_cliente_persona = IDCLIENTE and co_periodo_acumulacion = IDPERIODOACUMULACION;
     
        puntosGanados := cantidad + cantidadActual;
        puntosAcumulados := cantidad + cantidadTotal;

        update clpm_puntos_periodo_cliente
        set va_puntos_actuales = puntosganados,
        	va_puntos_totales = puntosacumulados,
            co_usuario_modificador = 'clubpgn',
            da_fecha_modificacion = sysdate
        where co_cliente_persona = IDCLIENTE
        and co_periodo_acumulacion = IDPERIODOACUMULACION
        and st_puntos_periodo_cliente = 'Y';
        
    ELSE
      
        insert into clpm_puntos_periodo_cliente
        (id,co_cliente_persona,co_periodo_acumulacion,va_puntos_totales,va_puntos_actuales,
         st_puntos_periodo_cliente,co_usuario_creador,da_fecha_creacion)
        values
        (seq_puntos_periodo_cliente.nextval,IDCLIENTE,IDPERIODOACUMULACION,CANTIDAD,CANTIDAD, 
         'Y','clubpgn',sysdate);
                
        puntosGanados:= CANTIDAD;
        
    END IF;

    RETURN puntosGanados;

END FUNTION_PUNTOS_CLIENTE;